package com.yulan.slide_windows;

import org.junit.Test;

import java.util.HashMap;
import java.util.Map;

/**
 * 325. 和等于 k 的最长子数组长度
 * 滑动窗口的应用
 */
public class LeetCode_325 {

    /**
     *
     * Hash
     */
    public int maxSubArrayLen(int[] nums, int k) {
       int len = nums.length;
       Map<Integer,Integer> map = new HashMap<>();// sum - len
       int sum = 0;//前缀和
       int max = 0;//记录最大长度
       for(int i = 0;i<len;i++){
           sum += nums[i];
           if(sum == k) max = Math.max(max,i+1);
           if(map.containsKey(sum - k)) max = Math.max(max, i - map.get(sum-k));
           if(!map.containsKey(sum)) map.put(sum,i);
       }
       return max > 0 ? max: 0;
    }



    @Test
    public void test1(){

    }
}
